﻿using Zarzadzanie_Restautacja.Helpers;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Zarzadzanie_Restautacja.Controllers;

namespace Zarzadzanie_Restautacja.Model
{
    public class RestauracjaContext : DbContext
    {
        public RestauracjaContext() : base(DbHandler.ConnectionString) { }

        #region Properties

        public DbSet<ZamowieniaPotrawy> ZamowieniaPotrawy { get; set; }
        public DbSet<Zamowienie> Zamowienia { get; set; }
        public DbSet<Potrawa> Potrawy { get; set; }

        /// <summary>
        /// Rzutowanie tabeli Pracownicy na DbSet
        /// </summary>
        public DbSet<Pracownik> Pracownicy { get; set; }

        /// <summary> 
        /// Filtracja Pracownikow - tylko obsluga
        /// </summary>
        public IQueryable<Obsluga> PracownicyObslugi
        {
            get { return this.Pracownicy.Where(prac => prac.Funkcja == (int)Funkcje.Obsluga).ToDTO<Pracownik, Obsluga>(); }
        }

        /// <summary>
        /// Filtracja Pracownikow - tylko Kuchnia
        /// </summary>
        public IQueryable<Kuchnia> PracownicyKuchni
        {
            get { return this.Pracownicy.Where(prac => prac.Funkcja == (int)Funkcje.Kuchnia).ToDTO<Pracownik, Kuchnia>(); }
        }

        /// <summary>
        /// Filtracja Pracownikow - tylko Ksiegowe
        /// </summary>
        public IQueryable<Ksiegowa> PracownicyKsiegowosci
        {
            get { return this.Pracownicy.Where(prac => prac.Funkcja == (int)Funkcje.Ksiegowa).ToDTO<Pracownik, Ksiegowa>(); }
        }

        #endregion Properties

        #region Methods

        /// <summary>
        /// Dodaje pracownika obslugi do bazy danych
        /// </summary>
        /// <param name="obsluga">pracownik do dodania</param>
        public void DodajPracownikaObslugi(Obsluga obsluga)
        {
            Pracownik pracownikObslugi = new Pracownik()
            {
                FunkcjaEnum = Funkcje.Obsluga,
                Id = obsluga.Id,
                Imie = obsluga.Imie,
                Nazwisko = obsluga.Nazwisko,
                Haslo = PasswordHelper.Hash(obsluga.Haslo)
            };

            this.Pracownicy.Add(pracownikObslugi);
            this.SaveChanges();
        }

        /// <summary>
        /// Dodaje pracownika kuchni do bazy
        /// </summary>
        /// <param name="kuchnia">pracownik kuchni do dodania</param>
        public void DodajPracownikaKuchni(Kuchnia kuchnia)
        {
            Pracownik pracownikKuchni = new Pracownik()
            {
                FunkcjaEnum = Funkcje.Kuchnia,
                Id = kuchnia.Id,
                Imie = kuchnia.Imie,
                Nazwisko = kuchnia.Nazwisko,
                Haslo = PasswordHelper.Hash(kuchnia.Haslo)

            };

            this.Pracownicy.Add(pracownikKuchni);
            this.SaveChanges();
        }

        #endregion Methods
    }
}
